Only disable 'completion-preview-active-mode' when it is on
authorEshel Yaron <me@eshelyaron.com>
Sun, 16 Mar 2025 08:45:25 +0000 (09:45 +0100)
committerEshel Yaron <me@eshelyaron.com>
Sun, 16 Mar 2025 08:45:25 +0000 (09:45 +0100)
* lisp/completion-preview.el
(completion-preview--post-command): Avoid calling
'completion-preview-active-mode' to disable the mode when
already off, since it forces a costly redisplay. (Bug#76964)

lisp/completion-preview.el

index 1c524985f055f4cbb82ff623ab6ba6f6e9204128..ae1394d27b40fc4e69ce5df34e090cb46a3e68d8 100644 (file)
@@ -437,13 +437,17 @@ point, otherwise hide it."
       (cancel-timer completion-preview--timer)
       (setq completion-preview--timer nil))
 
-    ;; If we're called after a command that itself updates the
-    ;; preview, don't do anything.
-    (unless internal-p
-      (if (and (completion-preview-require-certain-commands)
-               (completion-preview-require-minimum-symbol-length))
-          (completion-preview--show)
-        (completion-preview-active-mode -1)))))
+    (cond
+     (internal-p
+      ;; `this-command' took care of updating the preview.  Do nothing.
+      )
+     ((and (completion-preview-require-certain-commands)
+           (completion-preview-require-minimum-symbol-length))
+      ;; All conditions met.  Show or update the preview.
+      (completion-preview--show))
+     (completion-preview-active-mode
+      ;; The preview is shown, but it shouldn't be.  Hide it.
+      (completion-preview-active-mode -1)))))
 
 (defun completion-preview-insert ()
   "Insert the completion candidate that the preview is showing."